const mongoose = require('mongoose');
require('dotenv').config();
const config = require('../src/config');

// MongoDB连接URL
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/guan';

// 连接数据库
const connectDB = async () => {
    try {
        // 设置全局选项
        mongoose.set('strictQuery', false);
        
        console.log('正在连接 MongoDB...');
        console.log(`连接地址: ${MONGODB_URI}`);
        
        // 连接数据库
        await mongoose.connect(MONGODB_URI, {
            serverSelectionTimeoutMS: 10000, // 增加超时时间到10秒
            socketTimeoutMS: 45000,
            family: 4, // 强制使用 IPv4
            maxPoolSize: 10,
            minPoolSize: 5,
            retryWrites: true,
            w: 'majority',
            retryReads: true,
            connectTimeoutMS: 10000
        });

        // 监听连接事件
        mongoose.connection.on('connected', () => {
            console.log('=================================');
            console.log('MongoDB 连接成功！');
            console.log(`数据库地址: ${MONGODB_URI}`);
            console.log('=================================');
        });

        mongoose.connection.on('error', (err) => {
            console.error('MongoDB 连接错误:', err);
            console.error('请确保 MongoDB 服务已启动');
        });

        mongoose.connection.on('disconnected', () => {
            console.log('MongoDB 连接断开');
            console.log('尝试重新连接...');
            setTimeout(connectDB, 5000); // 5秒后尝试重新连接
        });

        // 监听进程终止信号
        process.on('SIGINT', async () => {
            try {
                await mongoose.connection.close();
                console.log('MongoDB 连接已通过应用程序终止关闭');
                process.exit(0);
            } catch (err) {
                console.error('MongoDB 断开连接时出错:', err);
                process.exit(1);
            }
        });

        console.log('MongoDB 连接已建立');
    } catch (err) {
        console.error('MongoDB 连接错误:', err);
        console.error('连接详情:', {
            uri: MONGODB_URI,
            error: err.message,
            stack: err.stack
        });
        console.error('请确保：');
        console.error('1. MongoDB 服务已启动');
        console.error('2. MongoDB 服务正在监听 27017 端口');
        console.error('3. 没有防火墙阻止连接');
        console.error('4. MongoDB 服务可以接受来自 127.0.0.1 的连接');
        
        // 5秒后尝试重新连接
        console.log('5秒后尝试重新连接...');
        setTimeout(connectDB, 5000);
    }
};

module.exports = connectDB; 